home *** CD-ROM | disk | FTP | other *** search
/ Merciful 5 / Merciful - Disc 5.iso / software / p / pcqpascalv1.2d.lha / Examples2 / KillX / KillDM.p < prev    next >
Text File  |  1997-05-06  |  5KB  |  168 lines

  1. Program KillDM;
  2.  
  3. { ***************************************************************************
  4.   *                                                                         *
  5.   *                         KillDM Version 1.1                              *
  6.   *                                                                         *
  7.   * Löscht Disaster-MasterV2-Virus von der Disk und aus dem Speicher.       *
  8.   * Geschrieben am 6.12.1992. Compiliert mit PCQ-Pascal 1.2b.               *
  9.   * Dieses Programm ist Freeware. Wenn teile des sourcecodes in eigenen     *
  10.   * Programmen benutzt werden sollte angegeben werden das sie von mir sind. *
  11.   *                                                                         *
  12.   * Meine Adresse:                                                          *
  13.   *                                                                         *
  14.   *  Andreas Tetzl                                                          *
  15.   *  Liebethaler Str.18                                                     *
  16.   *  O-8300, Pirna-Copitz                                                   *
  17.   *                                                                         *
  18.   ***************************************************************************
  19. }
  20.  
  21. {$I "Include:Utils/Stringlib.i" }
  22. {$I "Include:Libraries/Dos.i"   }
  23. {$I "Include:Exec/Execbase.i"   }
  24. {$I "Include:Utils/Parameters.i"}
  25.  
  26. VAR     F,F2                :    Text;
  27.     Zeile,Antwort,
  28.     Device,
  29.     Datei,clsPfad,
  30.      startupPfad        :    String;
  31.     DM,Startup,OK        :    Boolean;
  32.     Fib                :     FileInfoBlockPtr;
  33.     F_Lock            :     Filelock;
  34.     Size                :     Integer;
  35.     ExecPtr            :     Execbaseptr;
  36.  
  37.  
  38. Procedure FileLoeschen;
  39. Begin
  40.   If DeleteFile(clsPfad)=TRUE then Begin
  41.     Write("VirusFile gelöscht\n");
  42.   End Else Begin
  43.     Write("Kann Virus nicht löschen\n");
  44.   End;
  45. End;
  46.  
  47. Procedure StartupLoeschen;   { Erste Zeile der Startup-Sequence löschen }
  48. Begin
  49.   If Reopen(StartupPfad,F) then Begin
  50.     Readln(F,Zeile);                { Zeile mit Virusaufruf überlesen }
  51.     If Open("ram:Startup-Sequence.copy",F2) then Begin       { Neue Startup- }
  52.       While Not EOF(F) do Begin                       { Sequence in   }
  53.         Readln(F,Zeile);                               { RAM-DISK      }
  54.         Writeln(F2,zeile);
  55.       End;
  56.       Close(F2);
  57.     End Else Begin
  58.       Exit(20);
  59.     End;
  60.     Close(F);
  61.   End Else Begin
  62.     Write("Kann Startup-Sequence nich öffnen\n");
  63.     Exit(20);
  64.   End;
  65.  
  66.   If Reopen ("ram:startup-sequence.copy",F) then Begin     { Neue Startup- }
  67.     If Open(StartupPfad,F2) then Begin                 { Sequence auf  }
  68.       While not EOF(F) do Begin                     { Disk          }
  69.         Readln(F,Zeile);
  70.         Writeln(F2,Zeile);
  71.       End;
  72.       Close(F2);
  73.     End;
  74.     Close(F);
  75.   End;
  76.  
  77.   If DeleteFile("ram:startup-sequence.copy") then;
  78.   Write("Virusaufruf aus Startup-Sequence entfernt.\n");
  79. End;
  80.  
  81. Function Checklen : Integer;        { Filelänge überprüfen }
  82. Begin
  83.    F_Lock:=Lock(clsPfad,shared_lock);
  84.    New(Fib);
  85.    OK:=Examine(F_Lock,Fib);
  86.    Unlock(F_Lock);
  87.    Size := Fib^.Fib_Size;
  88.    Dispose(Fib);
  89.    Checklen:=Size;
  90. end;
  91.  
  92.  
  93. Procedure Check;
  94. Begin
  95.   If Reopen(clsPfad,F)=TRUE then Begin        { existiert eine cls-Datei? }
  96.     If Checklen=1740 then DM:=TRUE;
  97.     Close(F);
  98.   End;
  99.  
  100.   If Reopen(StartupPfad,F) then Begin            { Startup-Sequence }
  101.     Read(F,Zeile);                            { überprüfen       }
  102.     If Streq(Zeile,"cls *")=TRUE then Startup:=TRUE;
  103.     Close(F);
  104.   End;
  105.  
  106.   If (DM=TRUE) and (Startup=FALSE) then Begin
  107.     If Checklen=1740 then Begin
  108.       Write("Achtung ! Im Verzeichnis c: ist ein verdächtiges File,\n");
  109.       Write("der Virus wird aber nicht in der Startup-Sequence aufgerufen.\n");
  110.       Write("Soll ich das File löschen ? (j/n) ");
  111.       Readln(Antwort);
  112.       If Antwort[0]=Chr(106) then FileLoeschen;
  113.     End;
  114.     Return;
  115.   End;
  116.  
  117.  
  118.   If (DM=TRUE) and (Startup=TRUE) then Begin
  119.     Write("DisasterMasterV2-Virus gefunden. Löschen ? (j/n) ");
  120.     Readln(Antwort);
  121.     If Antwort[0]=Chr(106) then Begin
  122.       FileLoeschen;
  123.       StartupLoeschen;
  124.     End;
  125.     Return;
  126.   End;
  127. End;
  128.  
  129. Procedure ClearVector(v : ^Address);
  130. Begin
  131.   v^:=NIL;        { Vektor löschen }
  132. End;
  133.  
  134.  
  135. Begin
  136.   {$A
  137.     move.l  $4,_ExecPtr
  138.   }
  139.  
  140.   Write("\e[33m\e[1mKillDM\e[0m V1.1 © 1992 by Andreas Tetzl\n\n");
  141.  
  142.   Zeile:=AllocString(80);
  143.   Device:=AllocString(31);
  144.   Datei:=AllocString(100);
  145.   StartupPfad:=AllocString(49);
  146.   clsPfad:=AllocString(36);
  147.   
  148.   GetParam(1, Device);
  149.   strcpy(StartupPfad,Device);
  150.   strcat(StartupPfad,"c/cls");
  151.   strcpy(clsPfad,StartupPfad);
  152.   strcat(Device,"s/Startup-Sequence");
  153.   strcpy(StartupPfad,Device);
  154.   Check;
  155.   
  156.   FreeString(Zeile);
  157.   FreeString(Device);
  158.   FreeString(Datei);
  159.   FreeString(StartupPfad);
  160.   FreeString(clsPfad);
  161.   
  162.   Clearvector(Adr(ExecPtr^.KickTagPtr));
  163.   Clearvector(Adr(ExecPtr^.KickCheckSum));
  164. End.
  165.  
  166.  
  167.  
  168.